package com.liu.configuration;

import org.apache.commons.lang3.concurrent.BasicThreadFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.concurrent.*;

/**
 * @ClassName ThreadPoolConfiguration
 * @Author liuxin
 * @Date Created in 2023-02-01 19:57
 * @Version 1.0
 */

@Configuration
public class ThreadPoolConfiguration {

    @Bean
    public ExecutorService executorService() {
        return new ThreadPoolExecutor(
                //指定了线程池里的线程数量，核心线程池大小
                10,
                //指定了线程池里的最大线程数量
                20,
                //当线程池线程数量大于corePoolSize时候，多出来的空闲线程，多长时间会被销毁
                120,
                //时间单位，TimeUnit
                TimeUnit.SECONDS,
                //任务队列，用于存放提交但是尚未被执行的任务
                new ArrayBlockingQueue<>(100),
                //线程工厂，用于创建线程，线程工厂就是给我们new线程的
                new BasicThreadFactory.Builder().namingPattern("liuclasslog-%d")
                        .daemon(true).build(),
                // 所谓拒绝策略，是指将任务添加到线程池中时，线程池拒绝该任务所采取的相应策略
                //这个源码有默认的，可以直接去源码找
                new ThreadPoolExecutor.AbortPolicy());
    }


}
